\subsection{Obecné vyjádření lineárních 2D transformací}

V této části se budeme zabývat implementovanou skupinou lineárních 2D
transformací a především způsobem výpočtu transformačního klíče z nadbytečného počtu
identických bodů. Popsány budou:

\begin{itemize}
  \item Podobnostní transformace
  \item Afinní transformace
  \item Projektivní transformace
  \item Afinní transformace s podmínkami
  \item Speciální případ afinní transformace
\end{itemize}

Obecný výraz pro všechny tyto metody lze napsat pomocí obecného maticového
vyjádření $\bf x' = P x$, kde

$$ {\bf x'} = \left(
\begin{array}{ccc}
qx'\\
qy'\\ 
q\\
\end{array}
\right) 
{\bf P} = \left(
\begin{array}{ccc}
p_{00}  &   p_{10}  &   p_{20}  \\
p_{01}  &   p_{11}  &   p_{12} \\
p_{02} &    p_{12}  &    1                                
\end{array}
 \right),
  \hspace{0.5 cm} 
 {\bf x} = 
 \left(
\begin{array}{ccc}
x\\
y\\ 
1\\
\end{array}
\right) ,
$$ 

přičemž $x', y'$ jsou souřadnice v cílové soustavě, $x, y$ ve výchozí, 
$p_{nn}$  jsou transformační koeficienty a $q$ je pomocný parametr.

V následujících odstavcích budou uvedeny vztahy pro výpočet
transformačních koeficientů na základě známých identických bodů pomocí MNČ.
Ačkoliv je toto odvození poměrně jednoduché, uvádíme jej zde především z důvodu
dokumentace implementovaných algoritmů. Cílem je také vytvořit jednotný soupis
všech vztahů pro tyto metody.

Pro konečný výpočet koeficientů lze použít algoritmus vyrovnání
zprostředkujících měření (viz část \ref{kapvyr}). Cílem následujících sekcí
je tedy především popsat tvar matic ${\bf A}$, $d{\bf x}$ a ${\bf L}$. Pro konečný
transformačních parametrů pak stačí použít vzorec (\ref{ata}).

\subsection{Podobnostní transformace}
\label{vyrpod}
Podobnostní transformaci lze vyjádřit pomocí vztahu:
$$
\left(
\begin{array}{c}
x'\\
y'\\ 
1
\end{array}
\right) 
= 
\left(
\begin{array}{ccc}
a & -b & c\\
b &  a & d\\ 
0 & 0 & 1
\end{array}
\right) 
\left(
\begin{array}{c}
x\\
y\\ 
1
\end{array}
\right) 
$$

Jelikož se jedná o lineární vztah, lze jako přibližné hodnoty neznámých zvolit
$ {\bf x_0} =(0,0,0,0)^T$  a tedy platí i 
$0 + dx_i = x_i \rightarrow x_i = dx_i $
Neznámými jsou transformační koeficienty. Nechť tedy matice 
${\bf dx}$ má tvar: 

$$ d{\bf x} =
\left(
\begin{array}{c}
a\\
b\\
c\\
d
\end{array}
\right) $$

Potom matice ${\bf A}$ má tvar:
\begin{eqnarray}\label{podA}
{\bf A}=
\left(
\begin{array}{cccc}
x_{1} & -y_{1} & 1 & 0\\
& \vdots  &  & \\
x_{n} & -y_{n} & 1 & 0\\
y_{1} &  x_{1} & 0 & 1\\
& \vdots  &  & \\
y_{n} &  x_{n} & 0 & 1\\
\end{array}
\right)
\end{eqnarray}

Vzhledem k volbě nulových přibližných hodnot můžeme psát $F_i(x_0) = 0$ a tedy
(dle \ref{L}) matice ${\bf L}$ mátvar:
\footnote[1]{
V implementaci tohoto způsobu bylo znaménko matice $L$ vytknuta a uplatněno až
ve vztahu \ref{ata}.}

\begin{eqnarray}\label{podl}
{\bf L} = -\left(
\begin{array}{c}
x'_{1}\\
\vdots \\
x'_{n}\\
y'_{1}\\ 
\vdots \\
y'_{n}
\end{array}
\right) 
\end{eqnarray}


Použitím vztahu (\ref{ata}) dostáváme tak přímo vyrovnané neznámé bez nutnosti
další iterace. Důvodem je lineární vztah mezi neznámými a měřenými veličinami.

\subsection{Afinní transformace}
\label{vyraf}
Afinní transformaci lze vyjádřit pomocí vztahu:

$$\left(
\begin{array}{c}
x'\\
y'\\ 
1
\end{array}
\right) 
= 
\left(
\begin{array}{ccc}
a & b & c\\
d & e & f\\ 
0 & 0 & 1
\end{array}
\right) 
\left(
\begin{array}{c}
x\\
y\\ 
1
\end{array}
\right)
$$

Na základě obdobné volby neznámých jako v \ref{vyrpod}
můžeme psát tvar matice $d{\bf x}$:

$$ d{\bf x} =
\left(
\begin{array}{c}
a\\
b\\
c\\
d\\
e\\
f
\end{array}
\right) $$

Potom matice ${\bf A}$ má tvar:

\begin{eqnarray}\label{afineA}
{\bf A}=
\left(
\begin{array}{cccccc}
x_{1} & y_{1} & 1  &  0    & 0      & 0 \\
    &       & \vdots  &       &     &   \\
x_{n} & y_{n} & 1  &  0    & 0      & 0 \\
   0  & 0     & 0  & x_{1} &  x_{1} & 1 \\
      &       & \vdots  &       &   &   \\
   0  & 0     & 0  & x_{n} &  x_{n} & 1
\end{array}
\right)
\end{eqnarray}

Matice ${\bf L}$ je pak shodná jako u podobností transformace viz vztah
\ref{podl}. Použitím vztahu \ref{ata} dostáváme tak přímo vyrovnané
neznámé.

Pro optimalizaci výpočtu lze matici ${\bf A}$ zjednodušit a počítat neznáme
$a,b,c$ a $d,e,f$ odděleně. Matice ${\bf A}$  má pak tvar:

$$
{\bf A}=
\left(
\begin{array}{cccccc}
x_{1} & y_{1} & 1   \\
    &       & \vdots    \\
x_{n} & y_{n} & 1   \\
\end{array}
\right)
$$

přičemž dílčí matice neznámých jsou:

$$ d{\bf x_1} =
\left(
\begin{array}{c}
a\\
b\\
c
\end{array}
\right), 
d{\bf x_2} =
\left(
\begin{array}{c}
d\\
e\\
f
\end{array}
\right) $$ 

a dále matice ${\bf L}$ lze rozdělit takto:

\begin{eqnarray}
{\bf L_1} = -\left(
\begin{array}{c}
x'_{1}\\
\vdots \\
x'_{n}\\
\end{array}
\right), 
{\bf L_2} = -\left(
\begin{array}{c}
y'_{1}\\ 
\vdots \\
y'_{n}
\end{array}
\right) 
\end{eqnarray}

\subsection{Afinní transformace s podmínkami}

Jednou z často používaných forem afinní transformace je varianta, kdy
parametr zkosení je roven nule. Tento způsob se často využívá právě při
referencování satelitních snímků apod. Obecně lze tuto úlohu řešit buď přímým
vyloučením tohoto parametru, nebo použitím vyrovnání zprostředkujících měření
s podmínkami. V následujících odstavcích bude popsáno odvození vyrovnání
včetně podmínek, tak jak bylo implementováno. Výhodou je obecný přístup k
řešení daného problému. Výsledek pak umožňuje definovat jakékoliv jiné podmínky
bez zásahu do kódu.

Pro určení transformačních koeficientů je poučit  obecný algoritmus vyrovnání
zprostředkujících měření s podmínkami dle \cite{vyrovnani}.

Jelikož je nutné pracovat přímo s geometrickou formou transformačních parametrů
je výchozí vztah afinní transformace tento:

\begin{eqnarray}
\begin{array}{ccccccc}
\label{afinni}
x'&=&  S_{x} \cos{\alpha_{x}}& -&S_{y} \sin{\alpha_{y}} &+& T_{x}\\
y'&=&  S_{x} \sin{\alpha_{x}}& +&S_{y} \cos{\alpha_{y}} &+& T_{y}\\
\end{array}
\end{eqnarray}

kde $x', y'$ jsou cílové souřadnice, $x, x$ jsou výchozí souřadnice. Další
označení je:

\begin{table}[h]
\centering

\begin{tabular}{ll}
$S_{x}$  & měřítko ve směru osy X, \\
$S_{y}$  & měřítko ve směru osy Y, \\
$\alpha_{x}$ & úhel rotace pro osu $x$, \\
$\alpha_{y}$ & úhel rotace pro osu $y$, \\
$T_{x}$  & posun ve směru osy X, \\
$T_{y}$  & posun ve směru osy Y. \\
\end{tabular}
\end{table}
Parametr $q$ vyjadřující zkosení je potom $q = \alpha_{x} - \alpha_{y}$

Pro další postup vyrovnání byla matice $\bf{dx}$ neznámých zvolena takto:


\begin{eqnarray} \label{dxafinni}
d {\bf x} = \left(
\begin{array}{c}
dS_{x} \\
dS_{y} \\
\alpha_{x} \\
\alpha_{y} \\
dT_{x} \\
dT_{y}
\end{array}
\right) 
\end{eqnarray}

Na základě této volby byla odvozena matice $\bf A$.  Jednotlivé derivace  potom
jsou ($i = 1, \ldots, n$ je počet identických bodů):

\begin{eqnarray}
\begin{array}{lll}
 \left(\frac{dx}{S_x}\right)_i &=& \cos{\alpha_{x}} x_i\\
 \left(\frac{dx}{S_y}\right)_i &=& -\sin{\alpha_{y}} y_i\\
 \left(\frac{dx}{\alpha_{x}}\right)_i &=& -S_{x} \sin{\alpha_{x}}  x_i\\
 \left(\frac{dx}{\alpha_{y}}\right)_i &=& -S_{y} \cos{\alpha_{y}}  y_i\\
 \left(\frac{dx}{T_x}\right)_i &=& 1 \\
 \left(\frac{dx}{T_y}\right)_i &=& 0 \\
\end{array}
\end{eqnarray}

\begin{eqnarray}
\begin{array}{lll}
 \left(\frac{dy}{S_x}\right)_i &=& \sin{\alpha_{x}} x_i\\
 \left(\frac{dy}{S_y}\right)_i &=& \cos{\alpha_{y}} y_i\\
 \left(\frac{dy}{\alpha_{x}}\right)_i &=& S_{x} \cos{\alpha_{x}}  x_i\\
 \left(\frac{dy}{\alpha_{y}}\right)_i &=& -S_{y} \sin{\alpha_{y}}  y_i\\
 \left(\frac{dy}{T_x}\right)_i &=& 0 \\
 \left(\frac{dy}{T_y}\right)_i &=& 1 \\
\end{array}
\end{eqnarray}

Matice ${\bf A}$ má tedy tvar:

\begin{eqnarray}\label{afine2A}
 {\bf A}= \left(
\begin{array}{cccccc}
 \left(\frac{dx}{S_x}\right)_1  &  \left(\frac{dx}{S_y}\right)_1 &
 \left(\frac{dx}{\alpha_{x}}\right)_1    & \left(\frac{dx}{\alpha_{y}}\right)_1 &  
 \left(\frac{dx}{T_x}\right)_1  &  \left(\frac{dx}{T_y}\right)_1 \\
 &\vdots& & &\vdots& \\ 
  \left(\frac{dx}{S_x}\right)_n &  \left(\frac{dx}{S_y}\right)_n &
 \left(\frac{dx}{\alpha_{x}}\right)_n    & \left(\frac{dx}{\alpha_{y}}\right)_n &  
 \left(\frac{dx}{T_x}\right)_n  &  \left(\frac{dx}{T_y}\right)_n \\ 
   \left(\frac{dy}{S_x}\right)_1 &  \left(\frac{dy}{S_y}\right)_1 &
 \left(\frac{dy}{\alpha_{x}}\right)_1    & \left(\frac{dy}{\alpha_{y}}\right)_1 &  
 \left(\frac{dy}{T_x}\right)_1  &  \left(\frac{dy}{T_y}\right)_1 \\
  &\vdots& & &\vdots& \\
  \left(\frac{dy}{S_x}\right)_n &  \left(\frac{dy}{S_y}\right)_n &
 \left(\frac{dy}{\alpha_{x}}\right)_n    & \left(\frac{dy}{\alpha_{y}}\right)_n &  
 \left(\frac{dy}{T_x}\right)_n  &  \left(\frac{dy}{T_y}\right)_n 
\end{array}
\right) 
\end{eqnarray}

Zbývá ještě naplnit matici ${\bf L}$. Dle vztahů (\ref{L}) a (\ref{afinni}) můžeme psát:

\begin{eqnarray} 
\label{affine2L}
{\bf L}= \left(
\begin{array}{c}
   fx({\bf x_0}) - x'_1  \\    
     \vdots  \\ 
   fx({\bf x_0}) - x'_n  \\
   fy({\bf x_0}) - y'_1 \\
      \vdots  \\ 
   fy({\bf x_0}) - y'_n\\
\end{array}
\right),
\end{eqnarray}

kde ${\bf x_0}$ je vektor přibližných hodnot neznámých.

Pro zařazení podmínek do vyrovnání je ještě nutné určit tvar matice $\bf B$ a  $\bf U$.
Chceme-li např. definovat podmínku, že parametr zkosení $q$ má být roven
(tzn. musí platit $\alpha_{x} - \alpha_{y} = 0 $) bude rovnice
(\ref{podminky}) mít tento tvar:

$$ v_\alpha{x} + (-q_0) = 0$$
Matice $\bf B$ bude mít pak tvar (vzhledem ke vztahu (\ref{dxafinni})):

$$ {\bf B} = \left(0,0,-1,1,0,0\right) $$ 

Chceme-li aby parametr zkosení $q$ měl po vyrovnání hodnotu $q = 0$ bude matice 
${\bf U}$ mít tvar:

$$
\begin{array}{c}
{\bf U} = \left(
\alpha{x}_0 -\alpha{y}_0
\right)
\end{array},
$$ 

kde $q_0$ je přibližná hodnota parametru $q$. Výsledné opravy pak dostaneme
pomocí vzorce (\ref{vyropr}). Máme-li k dispozici odpovídající přibližné hodnoty
můžeme opravy počítat iterativně. Přibližné hodnoty lze získat např. výpočtem
afinní transformace bez podmínek jak je popsáno v části \ref{vyraf}.

\subsection{Projektivní transformace}

Projektivní transformaci lze vyjádřit pomocí vztahu:
$$
\left(
\begin{array}{c}
mx'\\
my'\\ 
m
\end{array}
\right) 
= 
\left(
\begin{array}{ccc}
a & b &  c\\
d &  e & f\\ 
g & h & 1
\end{array}
\right) 
\left(
\begin{array}{c}
x\\
y\\ 
1
\end{array}
\right) 
$$

Vzhledem k lineární formě vztahů můžeme opět zvolit:

$$ d{\bf x} =
\left(
\begin{array}{c}
a\\
b\\
c\\
d\\
e\\
f\\
g\\
h
\end{array}
\right) $$

Potom matice ${\bf A}$ má tvar:
\begin{eqnarray}\label{projA}
{\bf A} = 
\left(
\begin{array}{cccccccc}
x_{1} & y_{1} & 1  &  0    & 0      & 0 & -x'x & -x'y \\
      &       &       &  \vdots     &      &   &   &  \\
x_{n} & y_{n} & 1  &  0    & 0      & 0 & -x'x & -x'y \\
 0    & 0     & 0  &  x_{1} & y_{1} & 1 & -x'x & -x'y \\
      &       &       &  \vdots     &      &   &   &  \\
 0    & 0     & 0  &  x_{n} & y_{n} & 1 & -x'x & -x'y \\
\end{array}
\right)
\end{eqnarray}

Matice ${\bf L}$ je pak shodná jako u podobností transformace viz vztah
(\ref{podl}). Použitím vztahu (\ref{ata}) dostáváme tak opět přímo vyrovnané
neznámé.

\subsection{Speciální případy afinní transformace}

V této části bude popsáno odvození transformace pří které dochází ke změně
měřítek v obou směrech a k posunu. Na rozdíl od afinní transformace tedy není
uplatněni zkosení a rotace.

Použijeme-li ve vztahu (\ref{afinni}) nulové koeficienty pro stočení získáme
transformační rovnici ve tvaru: $$
\left(
\begin{array}{c}
x'\\
y'\\ 
1
\end{array}
\right) 
= 
\left(
\begin{array}{ccc}
a & 0  & b\\
0 &  c & d\\ 
0 & 0 & 1
\end{array}
\right) 
\left(
\begin{array}{c}
x\\
y\\ 
1
\end{array}
\right) 
$$

Nechť tedy matice neznámých ${\bf dx}$ má tvar: 

$$ d{\bf x} =
\left(
\begin{array}{c}
a\\
b\\
c\\
d
\end{array}
\right) $$

Potom matice ${\bf A}$ má tvar:
\begin{eqnarray}\label{specA}
{\bf A}=
\left(
\begin{array}{cccc}
x_{1} & 1 & 0 & 0\\
& \vdots  &  & \\
x_{n} & 1 & 0 & 0\\
0     &  0 & y_{1} & 1\\
& \vdots  &  & \\
0 &  0 & y_{n} & 1\\
\end{array}
\right)
\end{eqnarray}

Výsledný postup výpočtu neznámých je shodný s výpočtem afinní transformace. 
Použitím vztahu (\ref{ata}) dostáváme opět přímo vyrovnané
neznámé. Pro optimalizaci výpočtu je možné matici ${\bf A}$ opět rozdělit a
počítat koeficienty odděleně. Na rozdíl od afinní transformace však
nedostaneme pro obě skupiny koeficientů stejnou matici ${\bf A}$.
